package com.srmt.common.constants;

/**
 * 飞书API常量定义
 *
 * 集中管理飞书文档SDK中使用的各类常量值，避免魔法数字
 *
 * @author SRMT Development Team
 * @since 2.0.0
 */
public final class FeishuConstants {

    // 防止实例化
    private FeishuConstants() {
        throw new AssertionError("不能实例化常量类");
    }

    // ========== 块类型常量 ==========

    /**
     * 块类型：文本块
     */
    public static final int BLOCK_TYPE_TEXT = 2;

    /**
     * 块类型：标题块
     */
    public static final int BLOCK_TYPE_HEADING = 3;

    /**
     * 块类型：多维表格（Bitable）
     */
    public static final int BLOCK_TYPE_BITABLE = 18;

    /**
     * 块类型：电子表格（Sheet）
     */
    public static final int BLOCK_TYPE_SHEET = 30;

    /**
     * 块类型：普通表格（Table）
     */
    public static final int BLOCK_TYPE_TABLE = 31;

    // ========== 表格限制常量 ==========

    /**
     * 单次操作的最大行数
     */
    public static final int MAX_TABLE_ROWS = 500;

    /**
     * 单次操作的最大列数
     */
    public static final int MAX_TABLE_COLUMNS = 20;

    /**
     * 飞书表格默认总宽度（像素）
     */
    public static final int DEFAULT_TABLE_WIDTH = 5000;

    /**
     * 表格最小列宽（像素）
     */
    public static final int MIN_COLUMN_WIDTH = 50;

    /**
     * 表格默认列宽（像素）
     */
    public static final int DEFAULT_COLUMN_WIDTH = 100;

    // ========== 字符处理常量 ==========

    /**
     * 字母表大小（A-Z）
     */
    public static final int ALPHABET_SIZE = 26;

    /**
     * 大写字母A的ASCII码
     */
    public static final char LETTER_A = 'A';

    /**
     * 小写字母a的ASCII码
     */
    public static final char LETTER_A_LOWER = 'a';

    // ========== 批量操作限制 ==========

    /**
     * 批量更新的最大请求数
     */
    public static final int MAX_BATCH_SIZE = 100;

    /**
     * 批量获取用户ID的最大数量
     */
    public static final int MAX_BATCH_USER_IDS = 50;

    // ========== 时间常量（毫秒） ==========

    /**
     * 默认请求超时时间（毫秒）
     */
    public static final int DEFAULT_TIMEOUT_MS = 10000;

    /**
     * 默认重试间隔（毫秒）
     */
    public static final long DEFAULT_RETRY_INTERVAL_MS = 1000;

    /**
     * 默认限流重试超时（毫秒）
     */
    public static final long DEFAULT_RATE_LIMIT_TIMEOUT_MS = 5000;

    // ========== API端点分组 ==========

    /**
     * 文档API端点前缀
     */
    public static final String API_PREFIX_DOCX = "docx";

    /**
     * 云盘API端点前缀
     */
    public static final String API_PREFIX_DRIVE = "drive";

    /**
     * 通讯录API端点前缀
     */
    public static final String API_PREFIX_CONTACT = "contact";

    /**
     * 电子表格API端点前缀
     */
    public static final String API_PREFIX_SHEETS = "sheets";
}
